package 每日一题;

import java.util.*;

/**
 * @description:
 * @author: 小白白
 * @create: 2021-10-31
 **/

public class No500键盘行 {

    /**
     * 给你一个字符串数组 words ，只返回可以使用在 美式键盘 同一行的字母打印出来的单词。键盘如下图所示。
     * 美式键盘 中：
     * 第一行由字符 "qwertyuiop" 组成。
     * 第二行由字符 "asdfghjkl" 组成。
     * 第三行由字符 "zxcvbnm" 组成。
     * <p>
     * 示例 1：
     * 输入：words = ["Hello","Alaska","Dad","Peace"]
     * 输出：["Alaska","Dad"]
     * 示例 2：
     * 输入：words = ["omk"]
     * 输出：[]
     * 示例 3：
     * 输入：words = ["adsdf","sfd"]
     * 输出：["adsdf","sfd"] 
     * <p>
     * 提示：
     * 1 <= words.length <= 20
     * 1 <= words[i].length <= 100
     * words[i] 由英文字母（小写和大写字母）组成
     */

    private static Set<Character> set1 = new HashSet<>(Arrays.asList('Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'));
    private static Set<Character> set2 = new HashSet<>(Arrays.asList('A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'));
    private static Set<Character> set3 = new HashSet<>(Arrays.asList('Z', 'X', 'C', 'V', 'B', 'N', 'M', 'I', 'z', 'x', 'c', 'v', 'b', 'n', 'm'));

    public String[] findWords(String[] words) {

        // 可以使用 Character.toLowerCase 少处理点数据

        List<String> result = new ArrayList<>();

        for (String word : words) {
            int index = -1;
            char base = word.charAt(0);
            if (set1.contains(base)) {
                index = 1;
            } else if (set2.contains(base)) {
                index = 2;
            } else {
                index = 3;
            }
            boolean flag = true;
            for (int i = 1; i < word.length(); i++) {
                char c = word.charAt(i);
                if (index == 1 && !set1.contains(c)) {
                    flag = false;
                    break;
                }
                if (index == 2 && !set2.contains(c)) {
                    flag = false;
                    break;
                }
                if (index == 3 && !set3.contains(c)) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                result.add(word);
            }
        }

        String[] rr = result.toArray(new String[result.size()]);

        return rr;
    }

}
